iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 6
1
Software Development

後端PHP+Laravel--新手實戰日記系列 第 6

Day06-封裝/繼承/多型_PHP物件導向Part4

  • 分享至 

  • xImage
  •  

物件導向3大特性

封裝(Encapsulation)
繼承(Inheritance)
多型(Polymorphism)
三大特性有次序性,想繼承就要有封裝,想要多型就要有繼承。

1.封裝

就像你精心挑選了禮物(一個類)要給朋友驚喜,貼上包裝紙(private)收到禮物的人看不見內容(將屬性和方法實現的細節隱藏),但對外提供可操作的接口(被允許拆開禮物的人),大概像這樣:

https://ithelp.ithome.com.tw/upload/images/20190921/201190225qu6gUC48P.png

不僅使用者無法看到,也確保其無法任意更改物件內部的重要資料。

2.繼承

類可分為 基礎類別{ 衍生類別{} }
衍生類別可以直接訪問基礎類別中已存在的成員,實例化時會帶入基礎類別。繼承在物件導向中實現代碼重複利用,節省代碼工作;但同時也允許衍生類別進行擴展,增加在基礎類別中不存在的功能。

用生物演化來舉例,生理性別上的男女都歸屬於「人」這個物種,用在物件導向的繼承概念上,以人類是基礎類別,而生理性別上的男女屬於衍生類別來比喻,衍生類別也能有不同的特徵,串聯他們兩者之間關係用的是extends。

class 生理性別上的男女 extends 人類 

3.多型

直接從字面上看多型,意即許多型態,該如何使用呢?我們用一個例子來解釋:

假設今天我想要寫一個自動抓取某主題網站的資料,在第一週將資料儲存在本地電腦,但想到如果第二週老闆要求我應該將資料儲存在公司雲端,再好死不死第三週老闆又說除了公司雲端還要存一份到隨身碟中,不預先處理,那該有多麻煩啊。

當案子龐大及複雜時,修修改改很容易造成異常,這時就很適合使用多型來改善這個問題。

多型的概念為呼叫具備相同介面的多個物件,請他處理不同的事情。

以上面的例子,擁有相同的儲存需求(interface),但有好幾種儲存方式(class),由其他類別來共用一個介面,此時我並不會因為老闆的增減而需要大量改動程式碼。

小結

筆者這幾天OOP學習日記,偏向於用我自己的理解方式,描述得並不如其他文章精深,但如您是剛接觸的學習者,希望對你有些助益。再者,如您和我一樣是初學者,請務必閱讀PHP官方文件,這是瞭解OOP最好的途徑。

這幾天我不斷細想,到底學習日記中關於物件導向要探究到哪個程度,由於我尚未開始任何大型專案,Design Patterns也還尚在學習中,因此日記會以物件導向基礎為主,如後面Laravel框架實作有遇到其他物件導向的概念,屆時再一併跟大家分享。

如文章有任何問題,不吝賜教,歡迎歡迎。

參考資源:
William Sanders,2013年7月,PHP設計模式學習手冊,歐萊禮-碁峰圖書(譯者:賴屹民)
PHP物件導向 – 三大特性:封裝(Encapsulation)、繼承(Inheritance)、多型(Polymorphism)


上一篇
Day05-靜態(static)和self_PHP物件導向Part3
下一篇
Day07-有好多念法的Laravel!為什麼叫做Laravel?
系列文
後端PHP+Laravel--新手實戰日記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言